Redis와 연결
✒️ 2025-05-26 15:19 내용 수정
Node.js 교과서 개정 3판 내용 정리
Redis(Remote Dictionary Server)
- 공식 문서 : https://redis.io/
- 상세한 내용은 Redis(Remote Dictionary Server) 참고.
- 오픈소스 기반 비관계형 데이터베이스 관리시스템(DBMS) 이다.
- 메모리 기반의 DB으로 성능이 우수하고, 키(key)를 값(value)에 매핑하는 자료 구조의 디렉터리이다.
- 용량이 큰 데이터를 저장하는 저장소로는 부적합하다.
Redis와 연결
- 멀티 프로세서 간 세션 공유를 설정하기 위해 Redis와 Redislabs(Redis 호스팅 서비스)를 사용한다.
- 팀 프로젝트에서
express-mysql-session을 사용한 배포 버전을 만들었을 때pm2를 사용한 경우 로그인 유지가 안되는 문제가 발생했었다. - 이를 해결할 방법을 찾아봤을 때 redis를 사용하는 정보가 많아 로그인 유지 방법을 수정하기로 했다.
- 팀 프로젝트에서
- 먼저 위의 공식 문서에서 login을 통해 계정을 생성(혹은 다른 계정과 연동)을 하고, DB를 생성한다.
- DB는 aws를 사용했으며, 지역은 일본(ap-northeast)으로 설정했다.
- 프로젝트의
.env파일에REDIS_HOST,REDIS_PORT,REDIS_PASSWORD를 추가하고, 각 항목에public endpoint, port=16728(endpoint 마지막 숫자부분), Security의password를 추가한다.
# .env
# redis
REDIS_HOST=public_endpoint
REDIS_PORT=16728
REDIS_PASSWORD=password
- 프로젝트에
redis와connect-redis를 설치한다.
npm install redis connect-redis
- 이제 서버 설정에서 session 저장을 redis에 저장하도록 작성한다.
connect-redis는express-session에 의존성이 있어 session을 인수로 넣어서 호출해야 한다.- redislabs에서
public endpoint줄에connect를 누르면 연결 방법들이 나오는데, 여기서 Redis Client를 선택하고, client 타입을 고르면 생성된 코드를 보여준다.
- 설정을 완료했다면 프로젝트에서 직접 로그인을 수행해서 로그인이 유지되는지 테스트한다.
- 프로젝트의 로그인은
passport로 구현해서 사용했다. - passport를 사용한 로그인과 세션 참고.
- 프로젝트의 로그인은
// server.js
require("dotenv").config();
// redis
const redis = require('redis');
const RedisStore = require('connect-redis').default;
const redisClient = redis.createClient({
password: process.env.REDIS_PASSWORD,
socket: {
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT
}
});
redisClient.connect().catch(console.error);
// session 설정
const sessionOption = {
secret : process.env.COOKIE_SECRET, // secret 키
resave : false,
saveUninitialized : false,
cookie : {
maxAge : 60 * 60 * 10000, // 1시간
httpOnly : false, // 개발환경에선 false로 설정함
secure : false, // 개발환경에선 false로 설정함
},
name : 'custom-cookie-name',
store : new RedisStore({ client: redisClient })
}
Redis client로 저장된 데이터 확인
- 참고 자료 : https://log4day.tistory.com/7
- redis에 데이터가 저장은 되었는데 사이트에선 확인할 방법이 없었다.
- 팀 프로젝트에서 사용하던 AWS EC2에 ubuntu가 설치되어 있어 ubuntu에서 redis를 설치해서 외부로 접속하는 방법을 통해 데이터를 확인하기로 했다.
- redis 서버가 설치되어 있다면 서버 터미널에
redis-cli로 접근할 수 있다.
- redis 서버가 설치되어 있다면 서버 터미널에
sudo apt install redis
- redis 설치 후에는 아래 명령어로 redis 서버에 접근할 수 있다.
# redis 외부 접근
redis-cli -h [serverIP(endpoint)] -p [port] -a [password]
# user로 접근하는 명령어
redis-cli -u redis://default:[password]@[serverIP(endpoint)]:[port]
- 접속 후엔 key와 value를 각각 조회할 수 있다.
# 모든 key 조회
keys *
# 특정 key 존재 확인
# 1 : true
# 0 : false
exists keyname
# key의 value 확인
get keyname
- 로그인 했을 때 세션에 저장할 데이터 정보가 redis에 그대로 저장된 것을 확인할 수 있다.